
<!DOCTYPE HTML>
<html lang="" >
    <head>
        <meta charset="UTF-8">
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <title>服务端SDK · GitBook</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="description" content="">
        <meta name="generator" content="GitBook 3.2.3">
        
        
        
    
    <link rel="stylesheet" href="gitbook/style.css">

    
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
                
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
                
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
                
            
        

    

    
        
    
        
    
        
    
        
    
        
    
        
    

        
    
    
    <meta name="HandheldFriendly" content="true"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
    <link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">

    
    <link rel="next" href="34.html" />
    
    

    </head>
    <body>
        
<div class="book">
    <div class="book-summary">
        
            
<div id="book-search-input" role="search">
    <input type="text" placeholder="Type to search" />
</div>

            
                <nav role="navigation">
                


<ul class="summary">
    
    

    

    
        
        
    
        <li class="chapter " data-level="1.1" data-path="./">
            
                <a href="./">
            
                    
                    前言
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2" >
            
                <span>
            
                    
                    [第一章 系统介绍]
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.2.1" data-path="1.html">
            
                <a href="1.html">
            
                    
                    系统介绍
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.2" data-path="2.html">
            
                <a href="2.html">
            
                    
                    功能特点
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.3" >
            
                <span>
            
                    
                    [第二章 快速上手]
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.3.1" data-path="3.html">
            
                <a href="3.html">
            
                    
                    源码地址
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.2" data-path="4.html">
            
                <a href="4.html">
            
                    
                    服务部署
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.3" data-path="5.html">
            
                <a href="5.html">
            
                    
                    集成开发
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.4" data-path="6.html">
            
                <a href="6.html">
            
                    
                    源码测试
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.4" >
            
                <span>
            
                    
                    [第三章 架构分析]
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.4.1" data-path="7.html">
            
                <a href="7.html">
            
                    
                    系统架构
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.2" data-path="8.html">
            
                <a href="8.html">
            
                    
                    服务依赖关系
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.3" data-path="9.html">
            
                <a href="9.html">
            
                    
                    协议格式
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.4" data-path="10.html">
            
                <a href="10.html">
            
                    
                    消息类型
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.5" data-path="11.html">
            
                <a href="11.html">
            
                    
                    系统配置
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.6" data-path="12.html">
            
                <a href="12.html">
            
                    
                    功能模块
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.7" data-path="13.html">
            
                <a href="13.html">
            
                    
                    SPI定制化
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.5" >
            
                <span>
            
                    
                    [第四章 深度进阶]
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.5.1" data-path="14.html">
            
                <a href="14.html">
            
                    
                    秘钥交换
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.2" data-path="15.html">
            
                <a href="15.html">
            
                    
                    握手及快速重连
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.3" data-path="16.html">
            
                <a href="16.html">
            
                    
                    绑定用户
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.4" data-path="17.html">
            
                <a href="17.html">
            
                    
                    消息推送流程
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.5" data-path="18.html">
            
                <a href="18.html">
            
                    
                    HTTP代理
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.6" data-path="19.html">
            
                <a href="19.html">
            
                    
                    消息分发
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.7" data-path="20.html">
            
                <a href="20.html">
            
                    
                    消息序列化
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.8" data-path="21.html">
            
                <a href="21.html">
            
                    
                    消息加密与压缩
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.9" data-path="22.html">
            
                <a href="22.html">
            
                    
                    线程池配置与定制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.10" data-path="23.html">
            
                <a href="23.html">
            
                    
                    上行PUSH
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.11" data-path="24.html">
            
                <a href="24.html">
            
                    
                    广播推送与流控
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.12" data-path="25.html">
            
                <a href="25.html">
            
                    
                    广播推送条件过滤
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.13" data-path="26.html">
            
                <a href="26.html">
            
                    
                    消息ACK
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.14" data-path="27.html">
            
                <a href="27.html">
            
                    
                    离线消息
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.15" data-path="28.html">
            
                <a href="28.html">
            
                    
                    服务端启动流程分析
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.16" data-path="29.html">
            
                <a href="29.html">
            
                    
                    日志模块性能优化
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.17" data-path="30.html">
            
                <a href="30.html">
            
                    
                    JVM监控与性能分析
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.6" >
            
                <span>
            
                    
                    [第五章 关联服务]
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.6.1" data-path="31.html">
            
                <a href="31.html">
            
                    
                    Alloc服务
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.6.2" data-path="32.html">
            
                <a href="32.html">
            
                    
                    MPNS
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.7" >
            
                <span>
            
                    
                    [第六章 SDK接入]
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter active" data-level="1.7.1" data-path="33.html">
            
                <a href="33.html">
            
                    
                    服务端SDK
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.7.2" data-path="34.html">
            
                <a href="34.html">
            
                    
                    Android SDK
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.7.3" data-path="35.html">
            
                <a href="35.html">
            
                    
                    MPushClient(Java)
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.7.4" data-path="36.html">
            
                <a href="36.html">
            
                    
                    MPushClient(Swift)
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.7.5" data-path="37.html">
            
                <a href="37.html">
            
                    
                    MPushClient(Obj-C)
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.8" >
            
                <span>
            
                    
                    [第七章 常见问题]
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.8.1" data-path="38.html">
            
                <a href="38.html">
            
                    
                    常见问题
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.2" data-path="39.html">
            
                <a href="39.html">
            
                    
                    系统压测
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    

    

    <li class="divider"></li>

    <li>
        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
            Published with GitBook
        </a>
    </li>
</ul>


                </nav>
            
        
    </div>

    <div class="book-body">
        
            <div class="body-inner">
                
                    

<div class="book-header" role="navigation">
    

    <!-- Title -->
    <h1>
        <i class="fa fa-circle-o-notch fa-spin"></i>
        <a href="." >服务端SDK</a>
    </h1>
</div>




                    <div class="page-wrapper" tabindex="-1" role="main">
                        <div class="page-inner">
                            
<div id="book-search-results">
    <div class="search-noresults">
    
                                <section class="normal markdown-section">
                                
                                <h1 id="&#x670D;&#x52A1;&#x7AEF;sdk">&#x670D;&#x52A1;&#x7AEF;SDK</h1>
<h3 id="&#x4F7F;&#x7528;&#x65B9;&#x5F0F;">&#x4F7F;&#x7528;&#x65B9;&#x5F0F;</h3>
<p>1.&#x6DFB;&#x52A0;maven&#x4F9D;&#x8D56;</p>
<pre><code>&lt;dependency&gt;
  &lt;groupId&gt;com.github.mpusher&lt;/groupId&gt;
  &lt;artifactId&gt;mpush-client&lt;/artifactId&gt;
  &lt;version&gt;x.y.z&lt;/version&gt;
&lt;/dependency&gt;
</code></pre><p>2.&#x5728;&#x5DE5;&#x7A0B;<code>resources</code>&#x76EE;&#x5F55;&#x589E;&#x52A0;&#x914D;&#x7F6E;&#x6587;&#x4EF6;<code>application.conf</code>&#xFF0C;&#x5E76;&#x914D;&#x7F6E;<code>zookeeper</code></p>
<pre><code>  mp.zk.server-address=&quot;127.0.0.1:2181&quot;
  mp.redis.nodes=[&quot;127.0.0.1:6379&quot;]
</code></pre><p>3.&#x4F7F;&#x7528;<code>com.mpush.api.push.PushSende.java</code>&#x8FDB;&#x884C;&#x63A8;&#x9001;&#xFF0C;&#x4F7F;&#x7528;&#x5176;<code>create</code>&#x65B9;&#x6CD5;&#x521B;&#x5EFA;&#x670D;&#x52A1;&#xFF0C;<code>start</code>&#x65B9;&#x6CD5;&#x542F;&#x52A8;&#x670D;&#x52A1;&#xFF0C;<code>stop</code>&#x65B9;&#x6CD5;&#x505C;&#x6B62;&#x670D;&#x52A1;&#x3002;&#x63A8;&#x9001;&#x63A5;&#x53E3;&#x5B9A;&#x4E49;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code>public interface PushSender extends Service {

 /**
  * &#x521B;&#x5EFA;PushSender&#x5B9E;&#x4F8B;
  *
  * @return PushSender
  */
  static PushSender create() {
     return SpiLoader.load(PusherFactory.class).get();
  }

 /**
  * &#x63A8;&#x9001;push&#x6D88;&#x606F;
  *
  * @param context &#x63A8;&#x9001;&#x53C2;&#x6570;
  * @return FutureTask &#x53EF;&#x7528;&#x4E8E;&#x540C;&#x6B65;&#x8C03;&#x7528;
  */
  FutureTask&lt;PushResult&gt; send(PushContext context);

}
</code></pre><h4 id="&#x63A8;&#x9001;&#x6D41;&#x7A0B;">&#x63A8;&#x9001;&#x6D41;&#x7A0B;</h4>
<h4 id="&#x6D41;&#x7A0B;&#x56FE;">&#x6D41;&#x7A0B;&#x56FE;</h4>
<p><img src="images/14.JPG?raw=true" align="center"></p>
<h3 id="&#x6D41;&#x7A0B;&#x5206;&#x6790;">&#x6D41;&#x7A0B;&#x5206;&#x6790;</h3>
<p>1.PushSender&#x542F;&#x52A8;&#x540E;&#x9996;&#x5148;&#x4ECE;ZK&#x91CC;&#x83B7;&#x53D6;&#x53EF;&#x7528;&#x7684;GatewayServer&#x5217;&#x8868;&#xFF0C;&#x7136;&#x540E;&#x521B;&#x5EFA;&#x76F8;&#x5E94;&#x7684;Client&#x5206;&#x522B;&#x8FDE;&#x63A5;&#x5230;&#x5BF9;&#x5E94;&#x7684;GatewayServer
2.&#x5F53;&#x8C03;&#x7528;send&#x65B9;&#x6CD5;&#x53BB;&#x63A8;&#x9001;&#x65F6;&#xFF0C;PushSender&#x9996;&#x5148;&#x4F1A;&#x901A;&#x8FC7;RemoteRouterManager&#x67E5;&#x8BE2;&#x8981;&#x63A8;&#x9001;&#x7684;&#x7528;&#x6237;&#x5F53;&#x524D;&#x6240;&#x767B;&#x5F55;&#x7684;&#x673A;&#x5668;IP&#xFF0C;&#x7136;&#x540E;&#x901A;&#x8FC7;IP&#x9009;&#x62E9;GatewayServer&#x5E76;&#x901A;&#x8FC7;&#x7B2C;1&#x4E2D;&#x5BF9;&#x5E94;&#x7684;Client&#x628A;&#x6D88;&#x606F;&#x53D1;&#x9001;&#x5230;&#x8BE5;&#x673A;&#x5668;&#xFF0C;&#x56E0;&#x4E3A;&#x8BE5;&#x673A;&#x5668;&#x62E5;&#x6709;&#x7528;&#x6237;&#x7684;&#x94FE;&#x63A5;&#x3002;
3.GatewayServer&#x63A5;&#x6536;&#x5230;Client&#x53D1;&#x9001;&#x8FC7;&#x6765;&#x7684;&#x6D88;&#x606F;&#x540E;&#xFF0C;&#x9996;&#x5148;&#x901A;&#x8FC7;&#x67E5;&#x8BE2;&#x672C;&#x5730;&#x8DEF;&#x7531;LocalRouterManager&#x627E;&#x5230;&#x7528;&#x6237;&#x8FDE;&#x63A5;Connection&#xFF0C;&#x8BE5;&#x94FE;&#x63A5;&#x662F;&#x8FDE;&#x63A5;&#x5230;ConnectionServer&#x7684;&#x3002;
4.&#x5982;&#x679C;&#x8FDE;&#x63A5;&#x5B58;&#x5728;&#xFF0C;ConnectionServer&#x4F1A;&#x901A;&#x8FC7;&#x6B64;&#x8FDE;&#x63A5;&#x628A;&#x6D88;&#x606F;&#x4E0B;&#x53D1;&#x5230;&#x5BA2;&#x6237;&#x7AEF;&#x3002;
5.&#x5982;&#x679C;&#x63A8;&#x9001;&#x6210;&#x529F;&#xFF0C;GatewayServer&#x4F1A;&#x53D1;&#x9001;&#x6D88;&#x606F;&#x63A8;&#x9001;&#x6210;&#x529F;&#x7684;&#x6D88;&#x606F;&#x7ED9;PushSender&#x6240;&#x6301;&#x6709;&#x7684;Client
6.PushSender&#x6536;&#x5230;&#x63A8;&#x9001;&#x6210;&#x529F;&#x6D88;&#x606F;&#x540E;&#xFF0C;&#x4F1A;&#x901A;&#x8FC7;Callback#onSuccess&#x56DE;&#x8C03;&#x8C03;&#x7528;&#x65B9;&#xFF0C;&#x6574;&#x4E2A;&#x63A8;&#x9001;&#x6D41;&#x7A0B;&#x7ED3;&#x675F;&#x3002;
7.&#x5982;&#x679C;&#x4E2D;&#x95F4;&#x6709;&#x4EFB;&#x4F55;&#x5931;&#x8D25;&#x5219;&#x56DE;&#x8C03;Callback#onFailure&#x3002;
8.&#x5982;&#x679C;&#x7528;&#x6237;&#x4E0D;&#x5728;&#x7EBF;&#x5219;&#x56DE;&#x8C03;Callback#onOffline&#x3002;
9.&#x5982;&#x679C;&#x5728;&#x4E00;&#x5B9A;&#x65F6;&#x95F4;&#x5185;PushSender&#x6CA1;&#x6709;&#x6536;&#x5230;GatewayServer&#x54CD;&#x5E94;&#x7684;&#x6D88;&#x606F;&#x5219;&#x63A8;&#x9001;&#x8D85;&#x65F6;&#xFF0C;&#x56DE;&#x8C03;Callback#onTimeout&#x901A;&#x77E5;&#x8C03;&#x7528;&#x65B9;&#x3002;</p>
<h3 id="&#x6E90;&#x7801;&#x89E3;&#x8BFB;">&#x6E90;&#x7801;&#x89E3;&#x8BFB;</h3>
<p>1.<code>PushSender</code>&#x7684;&#x5B9E;&#x73B0;&#x7C7B;&#x4E3A;<code>com.mpush.client.push.PushClient.java</code></p>
<p>2.<code>PushClient</code>&#x4F7F;&#x7528;&#x7684;&#x662F;<code>ConnectionRouterManager</code>&#x8BE5;&#x7C7B;&#x7EE7;&#x627F;&#x81EA;<code>RemoteRouterManager</code>&#x589E;&#x52A0;&#x4E86;&#x672C;&#x5730;&#x7F13;&#x5B58;&#x53EF;&#x5728;&#x6D88;&#x606F;&#x9891;&#x7E41;&#x65F6;&#x51CF;&#x8F7B;Redis&#x538B;&#x529B;&#xFF0C;&#x4F46;&#x4F1A;&#x5B58;&#x5728;&#x4E00;&#x5B9A;&#x60C5;&#x51B5;&#x7684;&#x8BEF;&#x5224;&#x3002;</p>
<p>3.<code>com.mpush.client.push.PushRequestBus.java</code>&#x7528;&#x4E8E;&#x7EF4;&#x6301;&#x5F02;&#x6B65;&#x63A8;&#x9001;&#x4EFB;&#x52A1;&#xFF0C;&#x7EBF;&#x7A0B;&#x7684;&#x8C03;&#x6574;&#x53EF;&#x901A;&#x8FC7;&#x914D;&#x7F6E;&#x8BBE;&#x7F6E;&#xFF0C;&#x4EFB;&#x52A1;&#x7684;&#x62D2;&#x7EDD;&#x7B56;&#x7565;&#x4E3A;&#x5728;&#x8C03;&#x7528;&#x7EBF;&#x7A0B;&#x6267;&#x884C;Callback&#x3002;&#x5177;&#x4F53;&#x89C1;<code>DefaultThreadPoolFactory.java</code>&#x3002;&#x7EBF;&#x7A0B;&#x6C60;&#x9ED8;&#x8BA4;&#x914D;&#x7F6E;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code>   mp.thread.pool.push-client=2
</code></pre><p>4.<code>GatewayClient</code>&#x4F1A;&#x6839;&#x636E;<code>GatewayServer</code>&#x7684;&#x8FD0;&#x884C;&#x72B6;&#x6001;&#x81EA;&#x884C;&#x8C03;&#x6574;&#xFF0C;&#x5982;&#x679C;&#x6709;<code>GatewayServer&#x5B95;&#x673A;&#x5BF9;&#x5E94;&#x7684;</code>Client<code>&#x4F1A;&#x53CA;&#x65F6;&#x9500;&#x6BC1;&#xFF0C;&#x5982;&#x679C;&#x6709;&#x65B0;&#x7684;&#x673A;&#x5668;&#x8FDB;&#x6765;&#xFF0C;&#x5BF9;&#x5E94;</code>Client<code>&#x4E5F;&#x4F1A;&#x81EA;&#x52A8;&#x521B;&#x5EFA;&#x3002;&#x5177;&#x4F53;&#x53C2;&#x89C1;</code>GatewayConnectionFactory.java`&#x3002;</p>

                                
                                </section>
                            
    </div>
    <div class="search-results">
        <div class="has-results">
            
            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
            <ul class="search-results-list"></ul>
            
        </div>
        <div class="no-results">
            
            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
            
        </div>
    </div>
</div>

                        </div>
                    </div>
                
            </div>

            
                
                
                <a href="34.html" class="navigation navigation-next navigation-unique" aria-label="Next page: Android SDK">
                    <i class="fa fa-angle-right"></i>
                </a>
                
            
        
    </div>

    <script>
        var gitbook = gitbook || [];
        gitbook.push(function() {
            gitbook.page.hasChanged({"page":{"title":"服务端SDK","level":"1.7.1","depth":2,"next":{"title":"Android SDK","level":"1.7.2","depth":2,"path":"34.md","ref":"34.md","articles":[]},"previous":{"title":"[第六章 SDK接入]","level":"1.7","depth":1,"ref":"","articles":[{"title":"服务端SDK","level":"1.7.1","depth":2,"path":"33.md","ref":"33.md","articles":[]},{"title":"Android SDK","level":"1.7.2","depth":2,"path":"34.md","ref":"34.md","articles":[]},{"title":"MPushClient(Java)","level":"1.7.3","depth":2,"path":"35.md","ref":"35.md","articles":[]},{"title":"MPushClient(Swift)","level":"1.7.4","depth":2,"path":"36.md","ref":"36.md","articles":[]},{"title":"MPushClient(Obj-C)","level":"1.7.5","depth":2,"path":"37.md","ref":"37.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["livereload"],"pluginsConfig":{"livereload":{},"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"33.md","mtime":"2023-05-21T17:04:59.839Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-06-26T16:20:41.295Z"},"basePath":".","book":{"language":""}});
        });
    </script>
</div>

        
    <script src="gitbook/gitbook.js"></script>
    <script src="gitbook/theme.js"></script>
    
        
        <script src="gitbook/gitbook-plugin-livereload/plugin.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-search/search.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
        
    

    </body>
</html>

